summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/jni/id_cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/jni/id_cache.cpp')
-rw-r--r--src/android/app/src/main/jni/id_cache.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/android/app/src/main/jni/id_cache.cpp b/src/android/app/src/main/jni/id_cache.cpp
index a56ed5662..e7a86d3fd 100644
--- a/src/android/app/src/main/jni/id_cache.cpp
+++ b/src/android/app/src/main/jni/id_cache.cpp
@@ -20,6 +20,21 @@ static jmethodID s_disk_cache_load_progress;
static jmethodID s_on_emulation_started;
static jmethodID s_on_emulation_stopped;
+static jclass s_game_class;
+static jmethodID s_game_constructor;
+static jfieldID s_game_title_field;
+static jfieldID s_game_path_field;
+static jfieldID s_game_program_id_field;
+static jfieldID s_game_developer_field;
+static jfieldID s_game_version_field;
+static jfieldID s_game_is_homebrew_field;
+
+static jclass s_string_class;
+static jclass s_pair_class;
+static jmethodID s_pair_constructor;
+static jfieldID s_pair_first_field;
+static jfieldID s_pair_second_field;
+
static constexpr jint JNI_VERSION = JNI_VERSION_1_6;
namespace IDCache {
@@ -79,6 +94,58 @@ jmethodID GetOnEmulationStopped() {
return s_on_emulation_stopped;
}
+jclass GetGameClass() {
+ return s_game_class;
+}
+
+jmethodID GetGameConstructor() {
+ return s_game_constructor;
+}
+
+jfieldID GetGameTitleField() {
+ return s_game_title_field;
+}
+
+jfieldID GetGamePathField() {
+ return s_game_path_field;
+}
+
+jfieldID GetGameProgramIdField() {
+ return s_game_program_id_field;
+}
+
+jfieldID GetGameDeveloperField() {
+ return s_game_developer_field;
+}
+
+jfieldID GetGameVersionField() {
+ return s_game_version_field;
+}
+
+jfieldID GetGameIsHomebrewField() {
+ return s_game_is_homebrew_field;
+}
+
+jclass GetStringClass() {
+ return s_string_class;
+}
+
+jclass GetPairClass() {
+ return s_pair_class;
+}
+
+jmethodID GetPairConstructor() {
+ return s_pair_constructor;
+}
+
+jfieldID GetPairFirstField() {
+ return s_pair_first_field;
+}
+
+jfieldID GetPairSecondField() {
+ return s_pair_second_field;
+}
+
} // namespace IDCache
#ifdef __cplusplus
@@ -115,6 +182,31 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) {
s_on_emulation_stopped =
env->GetStaticMethodID(s_native_library_class, "onEmulationStopped", "(I)V");
+ const jclass game_class = env->FindClass("org/yuzu/yuzu_emu/model/Game");
+ s_game_class = reinterpret_cast<jclass>(env->NewGlobalRef(game_class));
+ s_game_constructor = env->GetMethodID(game_class, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/"
+ "String;Ljava/lang/String;Ljava/lang/String;Z)V");
+ s_game_title_field = env->GetFieldID(game_class, "title", "Ljava/lang/String;");
+ s_game_path_field = env->GetFieldID(game_class, "path", "Ljava/lang/String;");
+ s_game_program_id_field = env->GetFieldID(game_class, "programId", "Ljava/lang/String;");
+ s_game_developer_field = env->GetFieldID(game_class, "developer", "Ljava/lang/String;");
+ s_game_version_field = env->GetFieldID(game_class, "version", "Ljava/lang/String;");
+ s_game_is_homebrew_field = env->GetFieldID(game_class, "isHomebrew", "Z");
+ env->DeleteLocalRef(game_class);
+
+ const jclass string_class = env->FindClass("java/lang/String");
+ s_string_class = reinterpret_cast<jclass>(env->NewGlobalRef(string_class));
+ env->DeleteLocalRef(string_class);
+
+ const jclass pair_class = env->FindClass("kotlin/Pair");
+ s_pair_class = reinterpret_cast<jclass>(env->NewGlobalRef(pair_class));
+ s_pair_constructor =
+ env->GetMethodID(pair_class, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");
+ s_pair_first_field = env->GetFieldID(pair_class, "first", "Ljava/lang/Object;");
+ s_pair_second_field = env->GetFieldID(pair_class, "second", "Ljava/lang/Object;");
+ env->DeleteLocalRef(pair_class);
+
// Initialize Android Storage
Common::FS::Android::RegisterCallbacks(env, s_native_library_class);
@@ -136,6 +228,9 @@ void JNI_OnUnload(JavaVM* vm, void* reserved) {
env->DeleteGlobalRef(s_disk_cache_progress_class);
env->DeleteGlobalRef(s_load_callback_stage_class);
env->DeleteGlobalRef(s_game_dir_class);
+ env->DeleteGlobalRef(s_game_class);
+ env->DeleteGlobalRef(s_string_class);
+ env->DeleteGlobalRef(s_pair_class);
// UnInitialize applets
SoftwareKeyboard::CleanupJNI(env);